import { LoginResponse } from "@/pages/login/login.type";
import router from "@/router";
import { IPayload } from "@/type";
import { Model, routerRedux } from "dva";

export default {
  // 命名空间
  namespace: "global",

  //状态
  state: {
    token: "",
    roles: [],
  },

  /**可以做异步操作
   *不能直接修改state
   *如果要修改state必须使用put方法调用reducers里面的方法
   */
  effects: {
    *setUserInfo({ payload }: Partial<IPayload<LoginResponse>>, { put }) {
      //调用reducer方法进行赋值
      yield put({
        type: "save",
        payload,
      });
      yield put(routerRedux.push("/activityManage"));
    },
  },

  /**
   * 里面只能放纯函数，也就是不能有副作用的函数
   * 比如有return
   * return的是什么
   * state就是什么
   */
  reducers: {
    //通用方法 ，需要设置any
    save(state, action: Partial<IPayload<any>>) {
      return { ...state, ...action.payload };
    },
  },
  subscriptions: {
    setup({ history }) {
      history.listen((router) => {
        const global = JSON.parse(localStorage.getItem("global") || "{}");
        //设置无需登录的页面
        const ignoreURL = ["/login"];
        if (!global.token && !ignoreURL.includes(router.pathname)) {
          history.push("/login");
        }
      });
    },
  },
} as Model;
